#ifndef DBMS_CLIENT_GLOBAL_CONFIG_H
#define DBMS_CLIENT_GLOBAL_CONFIG_H

#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include <cstring>

namespace dbms_client {

    /**
     * 数据库客户端全局配置管理器
     * 负责管理网络连接参数和系统配置常量
     */
    class NetworkConfiguration
    {
    public:
        // 网络配置常量
        static constexpr const char* DEFAULT_SERVER_ADDRESS = "127.0.0.1";
        static constexpr int DEFAULT_SERVER_PORT = 8080;
        static constexpr int NETWORK_BUFFER_SIZE = 10000;
        static constexpr int MAX_RETRY_ATTEMPTS = 3;
        static constexpr int CONNECTION_TIMEOUT_MS = 5000;

        // 获取服务器地址（支持运行时修改）
        static const char* getServerAddress() {
            return serverAddress;
        }

        // 设置服务器地址
        static void setServerAddress(const char* address) {
#ifdef _WIN32
            strncpy_s(serverAddress, sizeof(serverAddress), address, _TRUNCATE);
#else
            std::strncpy(serverAddress, address, sizeof(serverAddress) - 1);
            serverAddress[sizeof(serverAddress) - 1] = '\0';
#endif
        }

        // 获取服务器端口
        static int getServerPort() {
            return DEFAULT_SERVER_PORT;
        }

        // 获取缓冲区大小
        static int getBufferSize() {
            return NETWORK_BUFFER_SIZE;
        }

    private:
        static char serverAddress[16]; // IPv4地址最大长度
    };

    // 为了保持向后兼容性，提供原有接口的别名
    using Global = NetworkConfiguration;

} // namespace dbms_client

// 全局变量声明（保持原有代码兼容性）
using dbms_client::Global;

// 静态成员定义
char dbms_client::NetworkConfiguration::serverAddress[16] = "127.0.0.1";

// 为了完全向后兼容原有代码，提供原有的全局变量接口
const char* const ip = dbms_client::NetworkConfiguration::getServerAddress();
constexpr int port = dbms_client::NetworkConfiguration::DEFAULT_SERVER_PORT;
constexpr int recv_buf_size = dbms_client::NetworkConfiguration::NETWORK_BUFFER_SIZE;

#endif // DBMS_CLIENT_GLOBAL_CONFIG_H